﻿#ifndef _FIXQ_H_
#define _FIXQ_H_

#include "sys_plat.h"
#include "nlocker.h"

// 定长消息队列结构
typedef struct _fixq_t
{
    int size;           // 消息队列可以存放消息的最大数量
    int in;             // 消息队列写位置
    int out;            // 消息队列读位置
    int cnt;            // 消息队列中消息数量
    void **buf;         // 指向存放消息的数组的地址
    nlocker_t locker;   // 锁
    sys_sem_t recv_sem; // 读信号量
    sys_sem_t send_sem; // 写信号量
} fixq_t;

net_err_t fixq_init(fixq_t *q, void **buf, int size, nlocker_type_t type);
net_err_t fixq_send(fixq_t *q, void *msg, int tmo);
void *fixq_recv(fixq_t *q, int tmo);
void fixq_destroy(fixq_t *q);
int fixq_count(const fixq_t *q);

#endif